<?php
/**
 * 钉钉接口
 * @desc
 */
class Api_DingTalk extends PhalApi_Api {

    public function getRules() {
        return [

            'departmentList' => [
                'token' => ['name' => 'token', 'type' => 'string', 'min' => 12, 'max' => 12, 'require' => true, 'desc' => 'tokenID'],
            ],
            'userInfo'       => [
                'token' => ['name' => 'token', 'type' => 'string', 'min' => 12, 'max' => 12, 'require' => true, 'desc' => 'tokenID'],
                "userid" => ['name' => 'userid', 'type' => 'string', 'require' => true, 'desc' => 'code']
            ],
            'userSimpleList' => [
                'token' => ['name' => 'token', 'type' => 'string', 'min' => 12, 'max' => 12, 'require' => true, 'desc' => 'tokenID'],
                "deptId" => ['name' => 'deptId', 'type' => 'int', 'require' => true, 'desc' => '部门id']
            ],
            'userList'       => [
                'token' => ['name' => 'token', 'type' => 'string', 'min' => 12, 'max' => 12, 'require' => true, 'desc' => 'tokenID'],
                "deptId" => ['name' => 'deptId', 'type' => 'int', 'require' => true, 'desc' => '部门id']
            ],
            'userSendMsg'=>[
                'token' => ['name' => 'token', 'type' => 'string', 'min' => 12, 'max' => 12, 'require' => true, 'desc' => 'tokenID'],
                "type"=>['name' => 'type', 'type' => 'string', 'require' => true, 'desc' => '消息类型 文本（text） 图片（image）语音（voice）文件（file）超链接（link）oa（oa）'],
                "sender" => ['name' => 'sender', 'type' => 'string', 'require' => true, 'desc' => '发送者id'],
                "cid" => ['name' => 'cid', 'type' => 'int', 'require' => true, 'desc' => '群消息或者个人聊天会话Id'],
                "agentid" => ['name' => 'agentid', 'type' => 'int', 'require' => true, 'desc' => ''],
                "content" => ['name' => 'content', 'type' => 'object', 'require' => true, 'desc' => '消息体 详情参考http://ddtalk.github.io/dingTalkDoc/#发送消息到群会话'],
            ],
            'getSignature'=>[
                "url" => ['name' => 'url', 'type' => 'uri', 'require' => true, 'desc' => '需要分享的url地址,需要完整地址'],
            ]

        ];
    }

    /**
     * 获取分享参数
     * @desc 钉钉内分享参数获取，支持callback
     * @return string nonceStr 随机码
     * @return int agentId  应用id
     * @return int timeStamp 时间戳
     * @return string corpId 企业id
     * @return string signature 签名
     * @return uri url 分享的url地址
     */
    public function getSignature(){
//        $url
        return DI()->DingTalk->createSignature($this->url);
    }
    /**
     * 部门列表
     * @desc 部门列表数据。以部门的order字段从小到大排列
     * @return array data 列表
     * @return boolean autoAddUser 当群已经创建后,是否有新人加入部门会自动加入该群,true表示是,false表示不是
     * @return boolean createDeptGroup 是否同步创建一个关联此部门的企业群, true表示是, false表示不是
     * @return int id 部门id
     * @return string name 部门名称
     */

    public function departmentList() {

        return DI()->DingTalk->departmentList();
    }

    /**
     * 获取成员信息
     * @desc 返回成员详细资料
     * @return boolean active 表示该用户是否激活了钉钉
     * @return string avatar 头像url
     * @return array department 成员所属部门id列表
     * @return string dingId 钉钉ID
     * @return email email 邮箱地址
     * @return boolean isAdmin 是否是企业的管理员,true表示是,false表示不是
     * @return boolean isBoss 是否为企业的老板,true表示是,false表示不是
     * @return boolean isHide 是否隐藏号码,true表示是,false表示不是
     * @return boolean isLeader 是否是部门的主管,true表示是,false表示不是
     * @return string jobnumber 员工工号
     * @return string mobile 手机号码
     * @return string name 成员名称
     * @return string openId openId
     * @return string order 表示人员在此部门中的排序,列表是按order的倒序排列输出的,即从大到小排列输出的
     * @return string position 职位信息
     * @return string remark 备注
     * @return string tel 分机号
     * @return string userid 员工唯一标识ID（不可修改）
     * @return string workPlace 办公地点
     * @return string orderInDepts 在对应的部门中的排序,Map结构的json字符串,key是部门的Id,value是人员在这个部门的排序值
     * @return string isLeaderInDepts 在对应的部门中是否为主管,Map结构的json字符串,key是部门的Id,value是人员在这个部门中是否为主管,true表示是,false表示不是
     * @return string extattr 扩展属性
     */

    public function userInfo() {
        return DI()->DingTalk->userGet($this->userid);
    }

    /**
     * 获取部门成员列表
     * @desc 返回 成员 name+userid
     * @return string name 成员名称
     * @return string userid 员工唯一标识ID（不可修改）
     */

    public function userSimpleList() {

        return DI()->DingTalk->userSimpleList($this->deptId);
    }

    /**
     * 获取部门成员列表
     * @desc 返回列表包含成员详细资料
     * @return boolean active 表示该用户是否激活了钉钉
     * @return string avatar 头像url
     * @return array department 成员所属部门id列表
     * @return string dingId 钉钉ID
     * @return email email 邮箱地址
     * @return boolean isAdmin 是否是企业的管理员,true表示是,false表示不是
     * @return boolean isBoss 是否为企业的老板,true表示是,false表示不是
     * @return boolean isHide 是否隐藏号码,true表示是,false表示不是
     * @return boolean isLeader 是否是部门的主管,true表示是,false表示不是
     * @return string jobnumber 员工工号
     * @return string mobile 手机号码
     * @return string name 成员名称
     * @return string openId openId
     * @return string order 表示人员在此部门中的排序,列表是按order的倒序排列输出的,即从大到小排列输出的
     * @return string position 职位信息
     * @return string remark 备注
     * @return string tel 分机号
     * @return string userid 员工唯一标识ID（不可修改）
     * @return string workPlace 办公地点
     */

    public function userList() {

        return DI()->DingTalk->userList($this->deptId);
    }

    /**
     * 给用户发送消息  todo
     * @desc
     * @return boolean isSend 是否发送成功,true表示成功,false表示失败
     */
    public function userSendMsg() {
        $msgtype = $this->type;
        $sender = $this->sender;
        $cid = $this->cid;
        $agentid = $this->agentid;
        $content = $this->content||[];
        return DI()->DingTalk->messageSend($msgtype, $sender, $cid, $agentid, $content);
    }

}
